home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / obero / oberon_lib.lha / oberon-a / source1.lha / source / Amiga / Hardware.mod < prev    next >
Text File  |  1994-08-08  |  15KB  |  526 lines

  1. (**************************************************************************
  2.  
  3.      $RCSfile: Hardware.mod $
  4.   Description: Definitions for Amiga hardware and custom chips
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 3.2 $
  8.       $Author: fjc $
  9.         $Date: 1994/08/08 00:47:05 $
  10.  
  11.   Includes Release 40.15
  12.  
  13.   (C) Copyright 1985-1993 Commodore-Amiga, Inc.
  14.       All Rights Reserved
  15.  
  16.   Oberon-A interface Copyright © 1994, Frank Copeland.
  17.   This file is part of the Oberon-A Interface.
  18.   See Oberon-A.doc for conditions of use and distribution.
  19.  
  20. ***************************************************************************)
  21.  
  22. MODULE Hardware;
  23.  
  24. (*
  25. ** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
  26. ** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
  27. ** $V- OvflChk       $Z- ZeroVars
  28. *)
  29.  
  30. IMPORT E := Exec, SYS := SYSTEM;
  31.  
  32. (*
  33. **      $VER: adkbits.h 39.1 (18.9.92)
  34. **
  35. **      bit definitions for adkcon register
  36. *)
  37.  
  38. CONST
  39.  
  40.   adkSetClr   * = 15; (* standard set/clear bit *)
  41.   adkPreComp1 * = 14; (* two bits of precompensation *)
  42.   adkPreComp0 * = 13;
  43.   adkMfmPrec  * = 12; (* use mfm style precompensation *)
  44.   adkUartBrk  * = 11; (* force uart output to zero *)
  45.   adkWordSync * = 10; (* enable DSKSYNC register matching *)
  46.   adkMsbSync  * =  9; (* (Apple GCR Only) sync on MSB for reading *)
  47.   adkFast     * =  8; (* 1 -> 2 us/bit (mfm), 2 -> 4 us/bit (gcr) *)
  48.   adkUse3pn   * =  7; (* use aud chan 3 to modulate period of ?? *)
  49.   adkUse2p3   * =  6; (* use aud chan 2 to modulate period of 3 *)
  50.   adkUse1p2   * =  5; (* use aud chan 1 to modulate period of 2 *)
  51.   adkUse0p1   * =  4; (* use aud chan 0 to modulate period of 1 *)
  52.   adkUse3vn   * =  3; (* use aud chan 3 to modulate volume of ?? *)
  53.   adkUse2v3   * =  2; (* use aud chan 2 to modulate volume of 3 *)
  54.   adkUse1v2   * =  1; (* use aud chan 1 to modulate volume of 2 *)
  55.   adkUse0v1   * =  0; (* use aud chan 0 to modulate volume of 1 *)
  56.  
  57.   pre000ns  * = {};                           (* 000 ns of precomp *)
  58.   pre140ns  * = { adkPreComp0 };              (* 140 ns of precomp *)
  59.   pre280ns  * = { adkPreComp1 };              (* 280 ns of precomp *)
  60.   pre560ns  * = { adkPreComp0, adkPreComp1 }; (* 560 ns of precomp *)
  61.  
  62. (*
  63. **      $VER: blit.h 39.1 (18.9.92)
  64. **
  65. **      Defines for direct hardware use of the blitter.
  66. *)
  67.  
  68. CONST
  69.  
  70.   hSizeBits* = 6;
  71.   vSizeBits* = 16-hSizeBits;
  72.   hSizeMask* = 3FH;        (* 2^6 -- 1 *)
  73.   vSizeMask* = 3FFH;       (* 2^10 - 1 *)
  74.  
  75. (* all agnii support horizontal blit of at least 1024 bits (128 bytes) wide *)
  76. (* some agnii support horizontal blit of up to 32768 bits (4096 bytes) wide *)
  77.  
  78. (* #ifndef  NO_BIG_BLITS *)
  79.  
  80.   minBytesPerRow * = 128;
  81.   maxBytesPerRow * = 4096;
  82.  
  83. (* #else *)
  84.  
  85. (* maxBytesPerRow * = 128; *)
  86.  
  87. (* #endif *)
  88.  
  89. (* definitions for blitter control register 0 *)
  90.  
  91.   abc   * = 7;
  92.   abnc  * = 6;
  93.   anbc  * = 5;
  94.   anbnc * = 4;
  95.   nabc  * = 3;
  96.   nabnc * = 2;
  97.   nanbc * = 1;
  98.   nanbnc* = 0;
  99.  
  100. (* some commonly used operations *)
  101.   aORb   * = { abc, anbc, nabc, abnc, anbnc, nabnc };
  102.   aORc   * = { abc, nabc, abnc, anbc, nanbc, anbnc };
  103.   aXORc  * = { nabc, abnc, nanbc, anbnc };
  104.   aTOd   * = { abc, anbc, abnc, anbnc };
  105.  
  106.   bc0Dest * = 8;
  107.   bc0SrcC * = 9;
  108.   bc0SrcB * = 10;
  109.   bc0SrcA * = 11;
  110.  
  111.   bc1Desc * = 1;         (* blitter descend direction *)
  112.  
  113.   dest * = {bc0Dest};
  114.   srcC * = {bc0SrcC};
  115.   srcB * = {bc0SrcB};
  116.   srcA * = {bc0SrcA};
  117.  
  118.   aShiftShift * = 12;       (* bits to right align ashift value *)
  119.   bShiftShift * = 12;       (* bits to right align bshift value *)
  120.  
  121. (* definations for blitter control register 1 *)
  122.   lineMode    * = 0;
  123.   fillOr      * = 3;
  124.   fillXor     * = 4;
  125.   fillCarryIn * = 2;
  126.   oneDot      * = 1;      (* one dot per horizontal line *)
  127.   ovFlag      * = 5;
  128.   signFlag    * = 6;
  129.   blitReverse * = 1;
  130.  
  131.   sud         * = {fillXor};
  132.   sul         * = {fillOr};
  133.   aul         * = {fillCarryIn};
  134.  
  135.   octant8  * = sul+sud;
  136.   octant7  * = aul;
  137.   octant6  * = aul+sul;
  138.   octant5  * = aul+sul+sud;
  139.   octant4  * = aul+sud;
  140.   octant3  * = sul;
  141.   octant2  * = {};
  142.   octant1  * = sud;
  143.  
  144. (* stuff for blit qeuer *)
  145.  
  146. TYPE
  147.  
  148.   BltnodePtr* = CPOINTER TO Bltnode;
  149.   Bltnode* = RECORD
  150.     n       * : BltnodePtr;
  151.     function* : E.PROC;
  152.     stat    * : SHORTINT;
  153.     blitsize* : INTEGER;
  154.     beamsync* : INTEGER;
  155.     cleanup * : E.PROC;
  156.   END; (* Bltnode *)
  157.  
  158. CONST
  159.  
  160. (* defined bits for bltstat *)
  161.   cleanup* = 40H;
  162.   cleanme* = cleanup;
  163.  
  164.  
  165. (*
  166. **      $VER: cia.h 39.1 (18.9.92)
  167. **
  168. **      registers and bits in the Complex Interface Adapter (CIA) chip
  169. *)
  170.  
  171.  
  172. (*
  173.  * ciaa is on an ODD address (e.g. the low byte) -- $bfe001
  174.  * ciab is on an EVEN address (e.g. the high byte) -- $bfd000
  175.  *
  176.  * do this to get the definitions:
  177.  *    extern struct CIA ciaa, ciab;
  178.  *)
  179.  
  180.  
  181. TYPE
  182.  
  183.   Pad = ARRAY 254 OF SHORTINT;
  184.  
  185.   CIAPtr* = CPOINTER TO CIA;
  186.   CIA* = RECORD
  187.     pra   * : E.BSET;    pad0 * : Pad;
  188.     prb   * : E.BSET;    pad1 * : Pad;
  189.     ddra  * : E.BSET;    pad2 * : Pad;
  190.     ddrb  * : E.BSET;    pad3 * : Pad;
  191.     talo  * : E.BSET;    pad4 * : Pad;
  192.     tahi  * : E.BSET;    pad5 * : Pad;
  193.     tblo  * : E.BSET;    pad6 * : Pad;
  194.     tbhi  * : E.BSET;    pad7 * : Pad;
  195.     todlow* : E.BSET;    pad8 * : Pad;
  196.     todmid* : E.BSET;    pad9 * : Pad;
  197.     todhi * : E.BSET;    pad10* : Pad;
  198.     unusedreg* : E.BSET; pad11* : Pad;
  199.     sdr   * : E.BSET;    pad12* : Pad;
  200.     icr   * : E.BSET;    pad13* : Pad;
  201.     cra   * : E.BSET;    pad14* : Pad;
  202.     crb   * : E.BSET;
  203.   END; (* CIA *)
  204.  
  205.  
  206. CONST
  207.  
  208. (* interrupt control register bit numbers *)
  209.   icrTa     * = 0;
  210.   icrTb     * = 1;
  211.   icrAlrm   * = 2;
  212.   icrSp     * = 3;
  213.   icrFlg    * = 4;
  214.   icrIr     * = 7;
  215.   icrSetClr * = 7;
  216.  
  217. (* control register A bit numbers *)
  218.   craStart  * = 0;
  219.   craPbon   * = 1;
  220.   craOutmode* = 2;
  221.   craRunmode* = 3;
  222.   craLoad   * = 4;
  223.   craInmode * = 5;
  224.   craSpmode * = 6;
  225.   craTodin  * = 7;
  226.  
  227. (* control register B bit numbers *)
  228.   crbStart  * = 0;
  229.   crbPbon   * = 1;
  230.   crbOutmode* = 2;
  231.   crbRunmode* = 3;
  232.   crbLoad   * = 4;
  233.   crbInmode0* = 5;
  234.   crbInmode1* = 6;
  235.   crbAlarm  * = 7;
  236.  
  237. (*
  238.  * Port definitions -- what each bit in a cia peripheral register is tied to
  239.  *)
  240.  
  241. (* ciaa port A (0BFE001H) *)
  242.   gamePort1 * = 7;   (* gameport 1, pin 6 (fire button) *)
  243.   gamePort0 * = 6;   (* gameport 0, pin 6 (fire button) *)
  244.   dskRdy    * = 5;   (* disk ready *)
  245.   dskTrack0 * = 4;   (* disk on track 00 *)
  246.   dskProt   * = 3;   (* disk write protect *)
  247.   dskChange * = 2;   (* disk change *)
  248.   led       * = 1;   (* led light control (0==>bright) *)
  249.   overlay   * = 0;   (* memory overlay bit *)
  250.  
  251. (* ciaa port B (0BFE101H) -- parallel port *)
  252.  
  253. (* ciab port A (0BFD000H) -- serial and printer control *)
  254.   comDTR    * = 7;   (* serial Data Terminal Ready *)
  255.   comRTS    * = 6;   (* serial Request to Send *)
  256.   comCD     * = 5;   (* serial Carrier Detect *)
  257.   comCTS    * = 4;   (* serial Clear to Send *)
  258.   comDSR    * = 3;   (* serial Data Set Ready *)
  259.   prtrSel   * = 2;   (* printer SELECT *)
  260.   prtrPOut  * = 1;   (* printer paper out *)
  261.   prtrBusy  * = 0;   (* printer busy *)
  262.  
  263. (* ciab port B (0BFD100H) -- disk control *)
  264.   dskMotor  * = 7;   (* disk motorr *)
  265.   dskSel3   * = 6;   (* disk select unit 3 *)
  266.   dskSel2   * = 5;   (* disk select unit 2 *)
  267.   dskSel1   * = 4;   (* disk select unit 1 *)
  268.   dskSel0   * = 3;   (* disk select unit 0 *)
  269.   dskSide   * = 2;   (* disk side select *)
  270.   dskDirec  * = 1;   (* disk direction of seek *)
  271.   dskStep   * = 0;   (* disk step heads *)
  272.  
  273.  
  274. (* cia addresses, initialised to point to correct addresses *)
  275.  
  276. VAR
  277.   ciaa* : CIAPtr;
  278.   ciab* : CIAPtr;
  279.  
  280.  
  281. (*
  282. **      $VER: custom.h 39.1 (18.9.92)
  283. **
  284. **      Offsets of Amiga custom chip registers
  285. *)
  286.  
  287.  
  288. (*
  289.  * do this to get base of custom registers:
  290.  * extern struct Custom custom;
  291.  *)
  292.  
  293.  
  294. TYPE
  295.  
  296.   AudChannelPtr* = CPOINTER TO AudChannel;
  297.   AudChannel* = RECORD
  298.     ptr* : E.APTR;      (* ptr to start of waveform data *)
  299.     len* : E.UWORD;     (* length of waveform in words *)
  300.     per* : E.UWORD;     (* sample period *)
  301.     vol* : E.UWORD;     (* volume *)
  302.     dat* : E.UWORD;     (* sample pair *)
  303.     pad* : ARRAY 2 OF E.UWORD;  (* unused *)
  304.   END; (* AudChannel *)
  305.  
  306.   SpriteDefPtr* = CPOINTER TO SpriteDef;
  307.   SpriteDef* = RECORD
  308.     pos  * : E.UWORD;
  309.     ctl  * : E.UWORD;
  310.     dataa* : E.UWORD;
  311.     datab* : E.UWORD;
  312.   END; (* SpriteDef *)
  313.  
  314.   CustomPtr* = CPOINTER TO Custom;
  315.   Custom* = RECORD
  316.     bltddat * : E.UWORD;
  317.     dmaconr * : E.WSET;
  318.     vposr   * : E.UWORD;
  319.     vhposr  * : E.UWORD;
  320.     dskdatr * : E.UWORD;
  321.     joy0dat * : E.UWORD;
  322.     joy1dat * : E.UWORD;
  323.     clxdat  * : E.WSET;
  324.     adkconr * : E.WSET;
  325.     pot0dat * : E.UWORD;
  326.     pot1dat * : E.UWORD;
  327.     potinp  * : E.WSET;
  328.     serdatr * : E.UWORD;
  329.     dskbytr * : E.UWORD;
  330.     intenar * : E.WSET;
  331.     intreqr * : E.WSET;
  332.     dskpt   * : E.APTR;
  333.     dsklen  * : E.UWORD;
  334.     dskdat  * : E.UWORD;
  335.     refptr  * : E.UWORD;
  336.     vposw   * : E.UWORD;
  337.     vhposw  * : E.UWORD;
  338.     copcon  * : E.WSET;
  339.     serdat  * : E.UWORD;
  340.     serper  * : E.UWORD;
  341.     potgo   * : E.WSET;
  342.     joytest * : E.UWORD;
  343.     strequ  * : E.UWORD;
  344.     strvbl  * : E.UWORD;
  345.     strhor  * : E.UWORD;
  346.     strlong * : E.UWORD;
  347.     bltcon0 * : E.WSET;
  348.     bltcon1 * : E.WSET;
  349.     bltafwm * : E.WSET;
  350.     bltalwm * : E.WSET;
  351.     bltcpt  * : E.APTR;
  352.     bltbpt  * : E.APTR;
  353.     bltapt  * : E.APTR;
  354.     bltdpt  * : E.APTR;
  355.     bltsize * : E.UWORD;
  356.     pad2d   * : SHORTINT;
  357.     bltcon0l* : E.BSET; (* low 8 bits of bltcon0, write only *)
  358.     bltsizv * : E.UWORD;
  359.     bltsizh * : E.UWORD;     (* 5e *)
  360.     bltcmod * : E.UWORD;
  361.     bltbmod * : E.UWORD;
  362.     bltamod * : E.UWORD;
  363.     bltdmod * : E.UWORD;
  364.     pad34   * : ARRAY 4 OF E.UWORD;
  365.     bltcdat * : E.UWORD;
  366.     bltbdat * : E.UWORD;
  367.     bltadat * : E.UWORD;
  368.     pad3b   * : ARRAY 3 OF E.UWORD;
  369.     deniseid* : E.UWORD;   (* 7c *)
  370.     dsksync * : E.UWORD;
  371.     cop1lc  * : E.ULONG;
  372.     cop2lc  * : E.ULONG;
  373.     copjmp1 * : E.UWORD;
  374.     copjmp2 * : E.UWORD;
  375.     copins  * : E.UWORD;
  376.     diwstrt * : E.UWORD;
  377.     diwstop * : E.UWORD;
  378.     ddfstrt * : E.UWORD;
  379.     ddfstop * : E.UWORD;
  380.     dmacon  * : E.WSET;
  381.     clxcon  * : E.WSET;
  382.     intena  * : E.WSET;
  383.     intreq  * : E.WSET;
  384.     adkcon  * : E.WSET;
  385.     aud     * : ARRAY 4 OF AudChannel;
  386.     bplpt   * : ARRAY 8 OF E.APTR;
  387.     bplcon0 * : E.WSET;
  388.     bplcon1 * : E.WSET;
  389.     bplcon2 * : E.WSET;
  390.     bplcon3 * : E.WSET;
  391.     bpl1mod * : E.UWORD;
  392.     bpl2mod * : E.UWORD;
  393.     bplhmod * : E.UWORD;
  394.     pad86   * : E.UWORD;
  395.     bpldat  * : ARRAY 8 OF E.UWORD;
  396.     sprpt   * : ARRAY 8 OF E.APTR;
  397.     spr     * : ARRAY 8 OF SpriteDef;
  398.     color   * : ARRAY 32 OF E.UWORD;
  399.     htotal  * : E.UWORD;
  400.     hsstop  * : E.UWORD;
  401.     hbstrt  * : E.UWORD;
  402.     hbstop  * : E.UWORD;
  403.     vtotal  * : E.UWORD;
  404.     vsstop  * : E.UWORD;
  405.     vbstrt  * : E.UWORD;
  406.     vbstop  * : E.UWORD;
  407.     sprhstrt* : E.UWORD;
  408.     sprhstop* : E.UWORD;
  409.     bplhstrt* : E.UWORD;
  410.     bplhstop* : E.UWORD;
  411.     hhposw  * : E.UWORD;
  412.     hhposr  * : E.UWORD;
  413.     beamcon0* : E.WSET;
  414.     hsstrt  * : E.UWORD;
  415.     vsstrt  * : E.UWORD;
  416.     hcenter * : E.UWORD;
  417.     diwhigh * : E.UWORD;    (* 1e4 *)
  418.     padf3   * : ARRAY 11 OF E.UWORD;
  419.     fmode   * : E.UWORD;
  420.   END; (* Custom *)
  421.  
  422. CONST
  423.  
  424. (* defines for beamcon register *)
  425.   varVBlank      * = 13;  (* Variable vertical blank enable *)
  426.   loLDis         * = 12;  (* long line disable *)
  427.   cscBlankEn     * = 11;  (* redirect composite sync *)
  428.   varVSync       * = 10;  (* Variable vertical sync enable *)
  429.   varHSync       * =  9;  (* Variable horizontal sync enable *)
  430.   varBeam        * =  8;  (* variable beam counter enable *)
  431.   displayDual    * =  7;  (* use UHRES pointer and standard pointers *)
  432.   displayPAL     * =  6;  (* set decodes to generate PAL display *)
  433.   varCSync       * =  5;  (* Variable composite sync enable *)
  434.   csBlank        * =  4;  (* Composite blank out to CSY* pin *)
  435.   cSyncTrue      * =  3;  (* composite sync true signal *)
  436.   vSyncTrue      * =  1;  (* vertical sync true *)
  437.   hSyncTrue      * =  0;  (* horizontal sync true *)
  438.  
  439. (* new defines for bplcon0 *)
  440.   useBplCon3    * = 1;
  441.  
  442. (* new defines for bplcon2 *)
  443.   bplcon2ZdCTen         * = 10; (* colormapped genlock bit *)
  444.   bplcon2ZdBPen         * = 11; (* use bitplane as genlock bits *)
  445.   bplcon2ZdBPSel0       * = 12; (* three bits to select one *)
  446.   bplcon2ZdBPSel1       * = 13; (* of 8 bitplanes in *)
  447.   bplcon2ZdBPSel2       * = 14; (* zdBPen genlock mode *)
  448.  
  449. (* defines for bplcon3 register *)
  450.   bplcon3ExtBlnkEn      * = 0;  (* external blank enable *)
  451.   bplcon3ExtBlkZD       * = 1;  (* external blank ored into trnsprncy *)
  452.   bplcon3ZdClkEn        * = 2;  (* zd pin outputs a 14mhz clock*)
  453.   bplcon3BrdnTran       * = 4;  (* border is opaque *)
  454.   bplcon3BrdnBlnk       * = 5;  (* border is opaque *)
  455.  
  456. (* Pointer to custom hardware *)
  457.  
  458. VAR
  459.  
  460.   custom* : CustomPtr;
  461.  
  462. (*
  463. **      $VER: dmabits.h 39.1 (18.9.92)
  464. **
  465. **      include file for defining dma control stuff
  466. *)
  467.  
  468. CONST
  469.  
  470. (* write definitions for dmaconw *)
  471.   dmaSetClr * = 15;
  472.   dmaAud0   * = 0;
  473.   dmaAud1   * = 1;
  474.   dmaAud2   * = 2;
  475.   dmaAud3   * = 3;
  476.   dmaAudio  * = {dmaAud0, dmaAud1, dmaAud2, dmaAud3}; (* 4 bit mask *)
  477.   dmaDisk   * = 4;
  478.   dmaSprite * = 5;
  479.   dmaBlitter* = 6;
  480.   dmaCopper * = 7;
  481.   dmaRaster * = 8;
  482.   dmaMaster * = 9;
  483.   dmaBlithog* = 10;
  484.   dmaAll* = {dmaAud0 .. dmaRaster}; (* all dma channels *)
  485.  
  486. (* read definitions for dmaconr *)
  487. (* bits 0-8 correspnd to dmaconw definitions *)
  488.   dmaBltDone   * = 14;
  489.   dmaBltNZero  * = 13;
  490.  
  491.  
  492. (*
  493. **      $VER: intbits.h 39.1 (18.9.92)
  494. **
  495. **      bits in the interrupt enable (and interrupt request) register
  496. *)
  497.  
  498. CONST
  499.  
  500.   intSetClr  * =  15;  (* Set/Clear control bit. Determines if bits *)
  501.                        (* written with a 1 get set or cleared. Bits *)
  502.                        (* written with a zero are allways unchanged *)
  503.   intIntEn   * =  14;  (* Master interrupt (enable only ) *)
  504.   intExter   * =  13;  (* External interrupt *)
  505.   intDskSync * =  12;  (* Disk re-SYNChronized *)
  506.   intRBF     * =  11;  (* serial port Receive Buffer Full *)
  507.   intAud3i   * =  10;  (* Audio channel 3 block finished *)
  508.   intAud2i   * =   9;  (* Audio channel 2 block finished *)
  509.   intAud1i   * =   8;  (* Audio channel 1 block finished *)
  510.   intAud0i   * =   7;  (* Audio channel 0 block finished *)
  511.   intBlit    * =   6;  (* Blitter finished *)
  512.   intVertB   * =   5;  (* start of Vertical Blank *)
  513.   intCoper   * =   4;  (* Coprocessor *)
  514.   intPorts   * =   3;  (* I/O Ports and timers *)
  515.   intSoftint * =   2;  (* software interrupt request *)
  516.   intDskblk  * =   1;  (* Disk Block done *)
  517.   intTBE     * =   0;  (* serial port Transmit Buffer Empty *)
  518.  
  519. (* $L- *)
  520.  
  521. BEGIN
  522.   ciaa := SYS.VAL (CIAPtr, 00BFE001H);
  523.   ciab := SYS.VAL (CIAPtr, 00BFD000H);
  524.   custom := SYS.VAL (CustomPtr, 00DFF000H);
  525. END Hardware.
  526.